import { Context } from "koishi";
import { COMMAND_CODE, DELIMITER } from "./constants";

/**
 * 将数据包编码为熊猫群聊的格式
 * @param parts 数据包的各个部分
 * @returns 编码后的字符串
 */
export function encodePacket(...parts: string[]): string {
  // 对所有参数进行安全处理，避免包含分隔符
  const safeParts = parts.map(part => 
    (part || '').replace(/→←/g, '→ ←')
  );
  // 尝试不加末尾分隔符，看是否能解决连接断开问题
  return safeParts.join(DELIMITER);
}

/**
 * 将熊猫群聊的数据解码为数组
 * @param data 接收到的原始数据字符串
 * @returns 解码后的数据数组
 */
export function decodePacket(data: string): string[] {
  // 移除末尾的分隔符并分割
  const cleanData = data.endsWith(DELIMITER) ? data.slice(0, -DELIMITER.length) : data;
  return cleanData.split(DELIMITER);
}

/**
 * 获取机器人的昵称
 * @param ctx Koishi上下文
 * @param botId 机器人ID
 * @returns 机器人昵称
 */
export async function getBotNickname(ctx: Context, botId: string): Promise<string> {
  try {
    const bot = ctx.bots.find(b => b.platform === 'onebot' && b.selfId === botId);
    if (!bot) {
      return '';
    }

    // 使用OneBot API获取昵称
    const loginInfo = await bot.internal._request('get_login_info', {});
    return loginInfo?.data?.nickname || bot.user?.name || '';
  } catch (error) {
    console.error('获取机器人昵称失败:', error);
    return '';
  }
}

/**
 * 获取群聊名称
 * @param ctx Koishi上下文
 * @param botId 机器人ID
 * @param groupId 群ID
 * @returns 群名称
 */
export async function getGroupName(ctx: Context, botId: string, groupId: string): Promise<string> {
  try {
    const bot = ctx.bots.find(b => b.platform === 'onebot' && b.selfId === botId);
    if (!bot) {
      return '';
    }

    const groupInfo = await bot.internal._request('get_group_info', {
      group_id: parseInt(groupId)
    });
    return groupInfo?.data?.group_name || '';
  } catch (error) {
    console.error('获取群名称失败:', error);
    return '';
  }
}

